<?php

    global $mikron, $auth;
    $mikron->Page->StartBody();
    // текущий активный кабинет
    $cabinet = $mikron->Users->CurrentUser()->user;
    
    if(is_null($cabinet))
    {
        header('Location: /');
        exit;
    }

    /*
    if($cabinet->lockexport->value==1)
    {
        echo "{{nicewindow style=error caption=Внимание}}Вам запрещено выводить средства. Свяжитесь с администрацией сайта.{{/nicewindow}}";
        endxwindow();
        return null;
    }

    $frm = new html_form("exwizard", "post", "/cabinet/");
        if(($frm->pageindex == 2) && ((int)$frm->formdata['method']==2))
        {
            $frm->pageindex = 4;
        }
        if($frm->pageindex == 3)
        {
            // Заполнили вывод на WebMoney
            $wmr = $frm->formdata['wmr'];
            $amount = (int)$frm->formdata['amount'];
        }
        elseif($frm->pageindex == 5)
        {
            // Заполнили вывод на мобильник
            $provider = $frm->formdata['provider'];
            $phonenumber = $frm->formdata['phonenumber'];
            $amount = (int)$frm->formdata['amount'];
        }
        else
        {
            $frm->addSelectControlFromEnumerator(1, "method", "Куда:", $mikron->Enumerators->getEnum("EX_DEVICE"));
            // мобильник
            $frm->addInput(2, "amount", "Сумма:", 5, 4, Array("isint"=>null, "moreorequal" => 1, "lessorequal"=>1000));
            $frm->addInput(2, "wmr", "R-кошелек:", 20, 16, Array("like"=>"R##########"));
            // WebMoney
            $frm->addInput(4, "amount", "Сумма:", 5, 4, Array("isint"=>null, "moreorequal" => 10, "lessorequal"=>1000));
            $frm->addSelectControlFromEntity(4, "provider", "Оператор:", $mikron->Queries->Query('T_PROVIDER'));
            $frm->addInput(4, "phonenumber", "Телефон:", 12, 11, Array("isint"=>null, "moreorequal" => 1000000, "lessorequal"=>9999999));
            $frm->addSubmit("next", "Далее");
        }
    $frm->end();
    */

    if($cabinet->lockexport->value==1)
    {
        makeerror("Вам запрещено выводить средства. Свяжитесь с администрацией сайта.");
        return null;
    }

    define('MIN_WM', 100);
    define('MAX_WM', 100000);
    define('MIN_MOB', 1000);
    define('MAX_MOB', 100000);

    if(isset($_GET['delexp']))
    {
        $delexp = (int)$_GET['delexp'];
        $exp = new T_EX_RECORD($delexp);
        if($exp->cabinet->value->id == $cabinet->id)
        {
            if($exp->status->value == 1)
            {
                $exp->status->value = 4; // 4 = canceled
                if(is_null($exp->operationlog->value))
                {
                    $expid = $exp->id;
                    echo "{{nicewindow style=error caption=Ошибка}}Серьезная ошибка отмены заявки №$expid, обратитесь за помощью к администратору.{{/nicewindow}}";
                }
                else
                {
                    $foplog = $exp->operationlog->value;
                    $foplog_classname = get_class($foplog);
                    $foplog_id = $exp->operationlog->value->id;
                    $foplog->source->value = 6;
                    try
                    {
                        OperationLogEcp($foplog, $cabinet);
                        $exp->operationlog->value = null;
                        $cabinet->amount->value += $exp->amount->value;
                        $mikron->EntityManager->Save(Array($exp, $cabinet, $foplog));
                        $mikron->EntityManager->DeleteEntity($foplog_classname, $foplog_id, true);
                    }
                    catch(Exception $ex)
                    {
                        return makeerror("Не удалось отменить заявку. Попробуйте еще раз.");
                    }
                }
            }
            else
            {
                return makeerror("Не удалось отменить заявку, т.к. она уже в обработке у администрации.");
            }
        }
    }

    $cabinetamount = (int)$cabinet->amount->value;

    function form($cabinetamount)
    {
        global $mikron;
        $exdata = isset($_POST['exdata'])?$_POST['exdata']: Array('amount'=>floor($cabinetamount / 100),'extodevice'=>1,'extonumber'=>null);
        $device = (int)$exdata['extodevice'];
        ?><form action="/?page=export" method="POST"><?php

        $tbl = new html_table(2, null, "10%", 0, 2);
        if(!isset($_POST['extodevice']))
        {
            $tbl->newcol("Куда:");
            $tbl->newcol();
                ?><select name="extodevice">
                <?php
                    $exdevices = $mikron->Enumerators->getEnum("EX_DEVICE");
                    foreach($exdevices as $item)
                    {
                        ?><option <?php if($device==$item['value']){echo "selected";} ?> value="<?php echo $item['value']; ?>"><?php echo $item['description']; ?></option><?php
                    }
                ?>
                </select><?php
            $tbl->newcol("&nbsp;");
            $tbl->newcol();
                ?><input type="submit" value="Далее"><?php
            $tbl->end();
            ?></form><?php
            return;
        }
        else
        {
            $exdata['extodevice'] = (int)$_POST['extodevice'];
            $device = (int)$exdata['extodevice'];
        }
        $amount = (int)$exdata['amount'];
        $number = (int)$exdata['extonumber'];
        if($number==0){$number=null;}
        ?><input name="exdata[extodevice]" type="hidden" value="<?php echo $device; ?>"><?php
        $tbl->newcol("Сумма:");
        $tbl->newcol();
            ?><input class="niceinput" name="exdata[amount]" maxlength="5" size="5" value="<?php echo $amount; ?>"> руб.<?php
        switch($device)
        {
            case 1:
                $tbl->newcol("R-кошелек:", true);
                $tbl->newcol();
                    ?><input class="niceinput" name="exdata[extonumber]" size="16" value="<?php echo $number; ?>"><?php
                break;
            case 2:
                $tbl->newcol("Оператор:", true);
                $tbl->newcol();
                    ?><select name="exdata[provider]" style="font-size: 1em; ">
                    <?php
                        $providers = $mikron->Queries->Query("T_PROVIDER");
                        while($item = $providers->fetch())
                        {
                            ?><option value="<?php echo $item->id; ?>"><?php echo $item->title->value; ?></option><?php
                        }
                    ?>
                    </select><?php
                $tbl->newcol("Телефон:", true);
                $tbl->newcol();
                    ?><input class="niceinput" name="exdata[extonumber]" size="16" value="<?php echo $number; ?>"><?php
                break;
        }
        $tbl->newcol("&nbsp;");
        $tbl->newcol();
            ?><input type="submit" value="Отправить"><?php
        $tbl->end();
        ?></form><?php
    }

    function CreateOrder($cabinet)
    {

        global $mikron;

        $exdata = $_POST['exdata'];
        $amount = (int)$exdata['amount'] * 100;
        $device = (int)$exdata['extodevice'];
        $number = $exdata['extonumber'];
        $provider = null;

        if($device == 1)
        {
            // вывод на WebMoney
            $r = strtoupper(substr($number,0,1));
            $num = (int)substr($number,1);
            if(($r!="R") || ($num < 1))
            {
                return makeerror("Неверный номер R-кошелька.");
            }
        }
        else
        {
            $provider = (int)$exdata['provider'];
        }
        if(($amount > $cabinet->amount->value) || ($amount < 1))
        {
            return makeerror("Недостаточно средств на балансе.");
        }
        if(strlen($number) < 10)
        {
            return makeerror("Неверный номер.");
        }

        $exdevices = $mikron->Enumerators->getEnum("EX_DEVICE");
        $exdevicefound = false;
        foreach($exdevices as $item)
        {
            if($device == $item['value'])
            {
                $exdevicefound = true;
                break;
            }
        }
        if(!$exdevicefound)
        {
            return makeerror("Неверный приемник для вывода.");
        }
        if(($device==1) && (($amount<MIN_WM) || ($amount>MAX_WM)))
        {
            return makeerror('Ошибка оформления заявки.<br />Минимальная сумма — '.round(MIN_WM/100,0)."руб, максимальная — ".round(MAX_WM/100,0)."руб");
        }

        if(($device==2) && (($amount<MIN_MOB) || ($amount>MAX_MOB)))
        {
            return makeerror('Ошибка оформления заявки.<br />Минимальная сумма — '.round(MIN_MOB/100,0)."руб, максимальная — ".round(MAX_MOB/100,0)."руб");
        }

        $providers = $mikron->Queries->Query('T_PROVIDER', (int)$provider);

        if($providers->count() == 0)
        {
            return makeerror('Ошибка оформления заявки. Неверный оператор.
            Попробуйте еще раз.');
        }
        
        $exrecord = new T_EX_RECORD();
        $exrecord->amount->value = $amount;
        $exrecord->cabinet->value = $cabinet->id;
        $exrecord->extodevice->value = $device;
        $exrecord->provider->value = $provider;
        $exrecord->extonumber->value = $number;
        // лог оформления заявки на вывод
        $foplog = ChangeCabinetBalance($cabinet, 5, -$amount, 0, 0, 0, 0);
        try
        {
            OperationLogEcp($foplog, $cabinet);
            $mikron->EntityManager->Save(Array($cabinet, $foplog), false);
            $exrecord->operationlog->value = $foplog->id;
            $mikron->EntityManager->Save(Array($exrecord));
            header("Location: /?ok=ex");
            exit;
        }
        catch(Exception $ex)
        {
            return makeerror("Ошибка оформления заявки. Попробуйте еще раз.");
        }
    }

    $ordercreated = false;
    $export_collection = $mikron->Queries->Query('T_EX_RECORD', null, new Criteria(Array(new Criterion('status', 1), new Criterion('cabinet', $cabinet->id))));

    if($export_collection->count() > 0)
    {
        /*
        ?>{{nicewindow style=silver caption="Заявка на вывод средств"}}<?php
        foreach($export_collection as $order)
        {
            $id = $order->id;
            $amount = $order->amount->value / 100;
            $dt = MikronDateTime::BeautifulDate(strtotime($order->dt->value), false, false);
            echo "Сумма $amount руб. от $dt";
            ?> <a href="/?page=export&delexp=<?php echo $id; ?>">Отменить</a><?php
        }
        ?>{{/nicewindow}}<?php
        */
    }
    else
    {
        
        if($cabinet->amount->value < 100)
        {
            makeerror('Вы еще не набрали минимальную сумму для вывода.');
            ShowHistory();
            return null;
        }

        if(isset($_POST['exdata']))
        {
            $ordercreated = CreateOrder($cabinet);
        }

        if(!$ordercreated)
        {
            form($cabinetamount);
        }
    }

    ShowHistory();

    function ShowHistory()
    {
        global $mikron;
        $ex_history = $mikron->Queries->Query('T_EX_RECORD', null, new Criterion('cabinet', $mikron->Users->CurrentUser()->id()));
        if($ex_history->count() < 1)
        {
            return;
        }

        echo '<h1>История вывода:</h1>';
        $tbl = new html_table(null, 'table4', '100%');
        $tbl->addhead('Дата');
        $tbl->addhead('Сумма');
        $tbl->addhead('Куда');
        $tbl->addhead('Статус');
        $tbl->addhead('Операции');
        while($item = $ex_history->fetch())
        {
            $status_code = $item->status->value;
            if($status_code != 4)
            {
                $id = $item->id;
                $dt = $item->dt->value;
                $dt = MikronDateTime::BeautifulDate(strtotime($dt)).' '.date('H:i', strtotime($dt));
                $status = null;
                $status = $mikron->Enumerators->getEnumNameById('EX_STATUS', $status_code);
                $where = $item->extonumber->value;
                if(!is_null($status))
                {
                    $tbl->newcol($dt);
                    $tbl->newcol(round($item->amount->value/100,2).' руб.');
                    $tbl->newcol($where);
                    $tbl->newcol($status);
                    $tbl->newcol();
                        if($item->status->value == 1)
                        {
                            ?><a href="/?page=export&delexp=<?php echo $id; ?>">Отменить</a><?php
                        }
                        else
                        {
                            echo '&nbsp;';
                        }
                }
            }
        }
        $tbl->end();
        echo '&nbsp;';

    }
    

    function makeerror($text)
    {
        echo "{{nicewindow style=error caption=\"Внимание\"}}$text{{/nicewindow}}";
    }

?>